package com.nextel.project.pedido.mvc;

import com.nextel.project.Configuracion;
import com.nextel.project.cliente.ControlCliente;
import com.nextel.project.pedido.ControlPedido;
import com.nextel.project.pedido.bean.PedidoDetalleBean;
import com.nextel.project.pedido.mvc.validate.ValidateProductoPedidoForm;
import com.nextel.project.usuario.ControlUsuario;
import com.nextel.ui.OCompositeScreen;
import com.nextel.ui.OEditableGrid;
import com.nextel.ui.OGrid;
import com.nextel.ui.OGridInfo;
import com.nextel.ui.OGridObjectRow;
import com.nextel.ui.OHandset;
import com.nextel.ui.OLabel;
import com.nextel.ui.OSoftKey;
import com.nextel.ui.OUILook;
import com.nextel.ui.custom.ODialogListener;
import javax.microedition.lcdui.Graphics;
import pe.com.nextel.idioma.IdiomaManager;
import pe.com.nextel.main.MVCAction;
import pe.com.nextel.util.List;
import pe.com.nextel.util.math.MathUtil;
import com.nextel.project.stock.ControlStock;

/**
 *
 *
 */
public class MVCProductoPedido extends MVCAction implements ODialogListener { //, Procesar

    public OLabel texto;
    public OEditableGrid table;
    private ValidateProductoPedidoForm validateForm;
    private List lista;
    private boolean flagForm; // para que no presione dos veces al momento de buscar
    private OSoftKey cmdBuscar, cmdObservacion, cmdFin, cmdCancelar, cmdStock; 

    public OEditableGrid getTable() {
        return table;
    }

    public OLabel getString() {
        return texto;
    }

    public OCompositeScreen getScreen() {
        return formulario;
    }

    protected void destroy() {
        super.destroy();
        this.lista = null;

        if (table != null) {
            table.clear();

            table = null;
        }
    }

    protected void createView() {
        cmdBuscar = new OSoftKey(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_AGREGAR));//"Agregar"
        cmdObservacion  = new OSoftKey(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_OBS));//"Obs."
        cmdStock = new OSoftKey(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ADDYUPDSTOCK));//"Agrega producto consulta en linea stock y actualiza"
                
        cmdFin = new OSoftKey(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_FINALIZAR));//"Finalizar"
        cmdCancelar = new OSoftKey(Configuracion.BOTON_ATRAS);


        formulario.setTitle("", OUILook.PLAIN_SMALL_TEXT);

        formulario.addSoftKey(cmdBuscar);
        formulario.addSoftKey(cmdStock);
        formulario.addSoftKey(cmdObservacion);
        
        
        formulario.addSoftKey(cmdFin);

        formulario.addSoftKey(cmdCancelar);

    }

    protected void createItems() {

        ControlPedido.getInstance().currentPedido.calcularMontoTotal();
        ControlPedido.getInstance().currentPedido.calcularCantidadTotal();

        setTitulo();

        crearLista();
        flagForm = true;
    }

    public void setTitulo() {
        formulario.setTitle(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_PED)+"# " +
                ControlPedido.getInstance().currentPedido.getLstPedidoDetalle().size() +
                " "+IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_TOT)+":" + Configuracion.CambiarSimbolo(MathUtil.setScale(ControlPedido.getInstance().currentPedido.getMontoTotal(), Configuracion.DECIMAL_PRESENTACION)), OUILook.PLAIN_SMALL_TITLE); // Total es igual en 3 idiomas
    }

    private void crearLista() {

        texto = new OLabel("---", OUILook.PLAIN_SMALL_TEXT, formulario.getWidth());
        texto.lineasMonstrar = 2;
        formulario.add(texto);

        int numberOfviewportLines = 3;

        int numberOfColumns = 3;
        String columnNames[] = new String[3];
        columnNames[0] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CODIGO);//"C\u00F3digo"
        columnNames[1] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CANT); //"Cant. "
        columnNames[2] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_TOTAL)+ " ";//"Total "// Igual en los 3 idiomas

        if ("1".equals(ControlUsuario.getInstance().currentUsuario.descuento)) {
            numberOfColumns = 4;
            columnNames = new String[4];
            columnNames[0] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CODIGO);//"C\u00F3digo";
            columnNames[1] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CANT); //"Cant.";
            columnNames[2] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_DES)+"%  ";//Des
            columnNames[3] = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_TOTAL)+ " ";//"Total ";
 
        }

        int maxWidth = (int) (formulario.getWidth() * numberOfColumns / 3.0);
        int columnWidths[] = {maxWidth / numberOfColumns, maxWidth / numberOfColumns, maxWidth / numberOfColumns, maxWidth / numberOfColumns };
        int columnAlignments[] = {Graphics.LEFT, Graphics.RIGHT, Graphics.RIGHT, Graphics.RIGHT };

        OGridInfo gridInfo = new OGridInfo(OGridInfo.GRID_BORDER_TYPE_BOTH, numberOfviewportLines,
                numberOfColumns,
                columnNames,
                columnAlignments, columnWidths, maxWidth,
                OUILook.PLAIN_SMALL_TEXT,
                OUILook.PLAIN_SMALL_TEXT, OUILook.PLAIN_SMALL_TEXT);

        table = new OEditableGrid(gridInfo);
        
        //Editando el Simbolo Decimal
        OEditableGrid.SIMBOLO_DECIMAL = (Configuracion.SimboloDecimal).charAt(0);
        
        validateForm = new ValidateProductoPedidoForm(this);
        table.setTableListener(validateForm);

        obtenerLista(numberOfColumns);
        table.setColumnHeadings(columnNames, OUILook.PLAIN_SMALL_TITLE);
        table.setViewableWidth(formulario.getWidth());
        formulario.add(table);

        if (ControlPedido.getInstance().currentPedido.getLstPedidoDetalle().size() <= 0) {
            table.keyPressed(OGrid.BTN_OK);
        }

    }

    private void obtenerLista(int numberOfColumns) {
        try {
            PedidoDetalleBean bean;

            lista = ControlPedido.getInstance().currentPedido.getLstPedidoDetalle();

            if (lista != null) {

                OGridObjectRow items[] = new OGridObjectRow[lista.size()];

                int contador = 0;

                for (int i = 0; i < lista.size(); i++) {

                    contador = 0;
                    bean = (PedidoDetalleBean) lista.get(i);

                    OGridObjectRow row = new OGridObjectRow(numberOfColumns);

                    row.addCell(contador, bean.getCodigoArticulo());

                    row.addEditableCell(++contador, Configuracion.CambiarSimbolo(bean.getCantidad()));

                    if ("1".equals(ControlUsuario.getInstance().currentUsuario.descuento)) {
                        row.addEditableCell(++contador, Configuracion.CambiarSimbolo(bean.getDescuento( )));
                    }
                    row.addCell(++contador, Configuracion.CambiarSimbolo(MathUtil.setScale(bean.getMonto(), Configuracion.DECIMAL_PRESENTACION)));
 
                    items[i] = row;
                }
                table.populate(items);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void performAction(OSoftKey c) {

        if (flagForm) {

            if (c == cmdCancelar) {

                ControlPedido.getInstance().showConfirmacion(
                        IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CONFIRMAR_CANCELAR_PEDIDO),//"Esta seguro que desea cancelar el pedido?",
                        this, formulario);
                flagForm = true;


            } else if (c == cmdStock) {
                flagForm = false;
                destroy();
                
                // --> se usa para la pantalla producto Busqueda
                ControlStock.getInstance().mvcProductoBusqueda.setBusquedaMVC(ControlStock.getInstance().getBusquedaMVCLinea());
                ControlStock.getInstance().setCurrent(ControlStock.getInstance().mvcProductoBusqueda);
                               
            }
            
            else if (c == cmdFin) {
                //actionBussinesst.getCurrentPedido().calcularMontoTotal();
                if (validateForm.validarTabla() && consistenciar()) {
                    flagForm = false;
                    destroy();
                    ControlPedido.getInstance().setCurrent(ControlPedido.getInstance().mvcPedidoFin);

                } else {
                    ControlPedido.getInstance().showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_COMPLETAR_DATOS), formulario);//"COMPLETAR DATOS"
                }

            } else if (c == cmdBuscar) {
                ControlPedido.getInstance().setBusquedaMVC();
                
                //System.out.println("validateForm.validarTabla()==" + validateForm.validarTabla());
                
                if (validateForm.validarTabla()) {
                    destroy();
                    ControlPedido.getInstance().setCurrent(ControlPedido.getInstance().mvcProductoBusqueda);

                } else {
                    ControlPedido.getInstance().showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_COMPLETAR_DATOS), formulario);//"COMPLETAR DATOS"
                }

            }else if(c == cmdObservacion){
                if (validateForm.validarTabla() && consistenciar()) {
                    flagForm = false;
                    destroy();
                    ControlPedido.getInstance().setCurrent(ControlPedido.getInstance().mvcPedidoObservacion);
                } else {
                    ControlPedido.getInstance().showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_COMPLETAR_DATOS), formulario);//"COMPLETAR DATOS"
                }            
            }
        }
    }

    public boolean consistenciar() {
        if (ControlPedido.getInstance().currentPedido.getLstPedidoDetalle().size() > 0) {
            return true;
        }
        return false;
    }

    public void botonOK() {

        if (flagForm) {
            flagForm = false;
            destroy();
            ControlPedido.getInstance().currentPedido = (null);
            ControlPedido.getInstance().currentPedidoDetalle = (null);
            ControlCliente.getInstance().setCurrent(ControlCliente.getInstance().mvcClienteDetalle);
        }
    }

    public void botonCancel() {
        flagForm = true;
        OHandset.getDisplay().setCurrent(formulario);
    }

    public void repintaForm() {
        this.formulario.repaintAll();
    }
}
